/**
* @file drv_usart1.h
* @brief usart1 interface
* @details 
* @author huangbin
* @version V1.0.0
* @date 2025-04-20
* @copyright All documents are copyrighted by Shenzhen Xinlongwei Technology Co., LTD.
*            They may not be used for commercial purposes without permission
*/
#ifndef __DRV_USART1_H__
#define	__DRV_USART1_H__
#include "datatype.h"
#include <stdint.h>

#ifdef __cplusplus
 extern "C" {
#endif /* __cplusplus */
//////////////////////////////////////////////////////////////////////////
#define USART1_RX_MAX    256+32
#define USART1_TX_MAX    256+32
/**
* @brief uart1管理数据结构
* @details 管理uart1数据收发
*/
typedef	struct mbuart {
	uint8_t		TxBuf[USART1_TX_MAX];		///<接收buffer
	uint8_t		RxBuf[USART1_RX_MAX]; 	  	///<接收buffer
	uint16_t	TxCnt;                	    ///<已经发送的数据数量
	uint16_t	TxTotal;              	    ///<要发送数据的数量
	uint16_t	RxCnt;                	    ///<接收数据数量
    UART_COPY_DATA fnCopy;                  ///<转移接收数据
}USART1_t;

/**
* @brief 串口1初始化函数
* @param[in] fnCopy 接收完成一帧的回调函数
*/  
extern void usart1_init(UART_COPY_DATA fnCopy);

/**
* @brief 串口1阻塞方式发送数据，发送完成才返回
* @param[in] txBuf 要发送数据的buffer
* @param[in] txLen 要发送数据的长度
*/
extern void uart1_send_loop(const uint8_t* txBuf, uint32_t txLen);

/**
* @brief 串口1中断方式发送数据，数据拷贝到发送缓冲区立即返回
* @param[in] txBuf 要发送数据的buffer
* @param[in] txLen 要发送数据的长度
*/
extern void uart1_send_interrupt(uint8_t* txBuf, uint16_t txLen);

//////////////////////////////////////////////////////////////////////////
#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif

